package teamBattle

import (
	"fmt"

	"public.com/goutil/typeUtil"
)

// 队伍成员信息
type TeamMember struct {
	// 玩家Id
	PlayerId string

	// 服务器Id
	ServerId int32

	// 服务器组Id
	ServerGroupId int32

	// 是否是真正的玩家
	IsPlayer bool

	// 是否使用双倍令
	IsUseDouble bool

	// 是否已经准备好战斗
	ReadyStatus ReadyStatusEnum

	// 原始数据
	OriginData map[string]interface{}
}

// 获取拷贝对象
func (this *TeamMember) GetCopy() *TeamMember {
	copyResult := *this

	return &copyResult
}

// 创建新的队伍成员对象
// data:请求信息
// 返回值:
// *TeamMember:创建的队伍成员对象
// error:错误信息
func NewTeamMemberFromDic(data typeUtil.MapData) (*TeamMember, error) {
	memberInfo := &TeamMember{}

	var errMsg error

	if memberInfo.PlayerId, errMsg = data.String("PlayerId"); errMsg != nil {
		return nil, fmt.Errorf("解析PlayerId出错：%v", errMsg.Error())
	}

	if memberInfo.ServerGroupId, errMsg = data.Int32("ServerGroupId"); errMsg != nil {
		return nil, fmt.Errorf("解析ServerGroupId出错：%v", errMsg.Error())
	}

	if memberInfo.ServerId, errMsg = data.Int32("ServerId"); errMsg != nil {
		return nil, fmt.Errorf("解析ServerId出错：%v", errMsg.Error())
	}

	if memberInfo.IsPlayer, errMsg = data.Bool("IsPlayer"); errMsg != nil {
		return nil, fmt.Errorf("解析IsPlayer出错：%v", errMsg.Error())
	}

	if memberInfo.IsUseDouble, errMsg = data.Bool("IsUseDouble"); errMsg != nil {
		return nil, fmt.Errorf("解析IsUseDouble出错：%v", errMsg.Error())
	}

	// 是否加入队伍时，是否更改为准备状态
	var readyStatus int
	readyStatus, _ = data.Int("ReadyStatus")
	if readyStatus == int(ReadyStatus_Ready) {
		memberInfo.ReadyStatus = ReadyStatus_Ready
	} else {
		// 未准备好战斗
		memberInfo.ReadyStatus = ReadyStatus_Init
	}

	// 原始数据
	memberInfo.OriginData = map[string]interface{}(data)

	return memberInfo, nil
}
